package actions.members;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import org.apache.commons.io.FileUtils;

import veilingAware.UserAware;
import veilingDomein.Categorie;
import veilingDomein.Media;
import veilingDomein.User;
import veilingDomein.Veiling;
import veilingService.ServiceProvider;

import com.opensymphony.xwork2.ActionSupport;

@SuppressWarnings("serial")
public class VeilingAction extends ActionSupport implements UserAware {

	private String minimum;
	private String naam;
	private String beschrijving;
	private String testText;
	private String categorie;
	private Date startDatum;
	private Date eindDatum;
	private User user;
	public Veiling veiling;
	private Media media;
	private List<File> pics;
	private List<String> picsContentType;
	private List<String> picsFileName;
	// pad zoals gezien vanuit gedeployde applicatie
	private String plaatjesPath = "/to5-veilingsite/plaatjes";
	private int veilingId = 0;

	public String execute() {
		int min = Integer.parseInt(getMinimum());
		Categorie cat = ServiceProvider.getBiedingService().getCategorieByNaam(categorie);
		startDatum = new Date();
		eindDatum = vergrootDate(30);
		DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
		setTestText("Veiling gemaakt met Minimum bedrag: " + getMinimum() + " Naam: " + getNaam() + " Beschrijving: "
				+ getBeschrijving() + " Categorie: " + getCategorie() + " Startdatum: " + dateFormat.format(startDatum)
				+ " Einddatum: " + dateFormat.format(eindDatum) + " Veiler naam: " + user.getUsername());
		veiling = new Veiling(startDatum, eindDatum, min, true, naam, cat, beschrijving, user.getId(), ServiceProvider
				.getVeilingService().getNewVeilingId());

		try {
			if (pics != null) {
				int i = 0;
				for (File f : pics) {
					media = new Media();
					File fileToCreate = new File(System.getProperty("catalina.base") + "/wtpwebapps" + plaatjesPath, picsFileName.get(i));
					FileUtils.copyFile(f, fileToCreate);
					media.setNaam(picsFileName.get(i));
					media.setSoort("plaatje");
					veiling.addMedia(media);
					i++;
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
			addActionError(e.getMessage());
			return INPUT;
		}
		ServiceProvider.getVeilingService().schrijfVeilingWeg(veiling);
		veilingId = ServiceProvider.getVeilingService().getNewVeilingId() - 1;
		return SUCCESS;
	}

	public void validate() {
		if (getMinimum().length() == 0) {
			addFieldError("minimum", getText("Vul het minimum in."));
		} else if (isIntNumber(getMinimum()) == false) {
			addFieldError("minimum", getText("Vul een getal in voor minimum."));
		}
		if (getNaam().length() == 0) {
			addFieldError("naam", getText("Vul een naam in voor de veiling."));
		} else if (getNaam().length() > 100) {
			addFieldError("naam", getText("De naam is te lang."));
		}
		if (getBeschrijving().length() == 0) {
			addFieldError("beschrijving", getText("Vul een beschrijving in."));
		}
		if (getCategorie().length() == 0) {
			addFieldError("categorie", getText("Vul een categorie in."));
		}
	}

	public String getMinimum() {
		return minimum;
	}

	public void setMinimum(String min) {
		this.minimum = min;
	}

	public String getNaam() {
		return naam;
	}
	
	public int getVeilingId(){
		return veilingId;
	}

	public void setNaam(String nm) {
		this.naam = nm;
	}

	public String getBeschrijving() {
		return beschrijving;
	}

	public void setBeschrijving(String besch) {
		this.beschrijving = besch;
	}

	public String getCategorie() {
		return categorie;
	}

	public void setCategorie(String cat) {
		this.categorie = cat;
	}

	public void setTestText(String testText) {
		this.testText = testText;
	}

	public String getTestText() {
		return testText;
	}

	@Override
	public void setUser(User user) {
		this.user = user;
	}

	public Date vergrootDate(int dagen) {
		Calendar cal = Calendar.getInstance();
		cal.setTime(startDatum); // Maak van Date een Calendar object
		cal.add(Calendar.DATE, dagen); // Voegt aantal dagen toe
		eindDatum = cal.getTime(); // Maak van Calendar een Date object
		return eindDatum;
	}

	public boolean isIntNumber(String num) {
		try {
			Integer.parseInt(num);
		} catch (NumberFormatException nfe) {
			return false;
		}
		return true;
	}

	public List<File> getPics() {
		return pics;
	}

	public void setPics(List<File> pics) {
		this.pics = pics;
	}

	public List<String> getPicsContentType() {
		return picsContentType;
	}

	public void setPicsContentType(List<String> picsContentType) {
		this.picsContentType = picsContentType;
	}

	public List<String> getPicsFileName() {
		return picsFileName;
	}

	public void setPicsFileName(List<String> picsFileName) {
		this.picsFileName = picsFileName;
	}
}
